|
トランスレーション・ルックアサイド・バッファ(英: Translation Lookaside Buffer、TLB)とは、メモリ管理ユニット内のある種のキャッシュであり、仮想アドレスから物理アドレスへの変換の高速化を図るものである。こんにちの仮想記憶をサポートするマイクロプロセッサは、仮想空間と物理空間のマッピングにTLBを利用しているのがほとんどである。 TLBは通常、連想メモリ (CAM) で実装されている。CPUがメモリ空間にアクセスする際、検索キーとして仮想アドレスを使い、TLB上にそのアドレスに対応するエントリがあれば、検索結果として対応する物理アドレスが返る。これを「TLBヒット」と呼ぶ。要求したアドレスがTLB内にない場合は「TLBミス」であり、アドレス変換のためにページテーブルを辿っていかなければならない。これを「ページウォーク」と呼ぶ。ページウォークは複数個所のメモリの内容を読み取り、そこから物理アドレスを計算しなければならず、時間がかかる作業である。ページウォークによって物理アドレスが判明した後、その仮想アドレスと物理アドレスのマッピングがTLBに格納される。 == 概要 == TLB には固定個のスロットがあり、仮想アドレスから物理アドレスへの変換のためのページテーブルエントリが入れられる。仮想アドレス空間はプロセスから見えるメモリ空間である。この空間は固定サイズのページに分割されている。ページテーブル(通常、メモリ上にある)は、仮想ページが物理メモリ上のどの位置に対応しているかを把握している。TLBはそのページテーブルのキャッシュとして機能する。すなわち、ページテーブルの中身のサブセットだけを格納する。 TLB には物理メモリアドレスが格納される。TLBはCPUとキャッシュメモリの間に置かれている場合もあるし、キャッシュと主記憶装置の間に置かれることもあるし、複数次のキャッシュ間に置かれる場合もある。これは、キャッシュが仮想アドレスを使っているか、物理アドレスを使っているかで決定される。キャッシュが仮想アドレスを使っている場合、メモリアクセス要求はCPUからキャッシュに直接伝えられ、キャッシュにヒットしなかった場合にTLBが使われる。キャッシュが物理アドレスを使っている場合、TLBはメモリアクセスの度に必ずアクセスされ、得られた物理アドレスを使ってキャッシュにアクセスする。どちらの実装にも利点と欠点がある。仮想アドレスを使うキャッシュの場合、仮想アドレスのキーとなる部分に加え、「アドレス空間識別子」(ASID) と呼ばれるキーも持つことがある。ASIDを持たない仮想キャッシュの場合、マルチプロセッシング環境ではコンテキストスイッチの度にキャッシュの内容をフラッシュしなければならない。 ハーバード・アーキテクチャまたはその系統の場合、命令とデータで仮想空間が分離していたり、メモリアクセス用ハードウェアが分離していたりする。その場合、命令とデータで別々のTLBを必要とする場合がある。 物理アドレス式のキャッシュでの最適化として、TLB参照とキャッシュアクセスを並行して同時に行う方式がある。仮想アドレスの下位ビット群(例えば、4KBページの仮想記憶方式なら、仮想アドレスの下位12ビット)はページ内オフセットであり、仮想-物理変換では変化しない。このため、キャッシュのインデックスがその変化しない範囲内であれば、アクセスすべきキャッシュラインは一意に定まり、TLBによる変換を待たずにキャッシュにアクセスできる。その後、そのキャッシュラインのタグ情報とTLBから得た物理アドレスを比較して、所望の物理アドレスの内容かどうかを判断する。キャッシュがページサイズより大きい場合でもTLBアクセスとキャッシュアクセスを並行して行うことも可能である。その場合、キャッシュのインデックスには仮想アドレスを使い、キャッシュエントリ内のタグには物理アドレスを格納しておく(仮想インデックス物理タグ方式)。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「トランスレーション・ルックアサイド・バッファ」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Translation lookaside buffer 」があります。 スポンサード リンク
|